package com.metaera.app.utils;

import android.app.Notification;
import android.app.NotificationChannel;
import android.content.Context;
import android.util.Log;

import com.metaera.app.BuildConfig;
import com.metaera.app.PushMessageService;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.commonsdk.utils.UMUtils;
import com.umeng.message.PushAgent;
import com.umeng.message.UmengMessageHandler;
import com.umeng.message.UmengNotificationClickHandler;
import com.umeng.message.api.UPushRegisterCallback;
import com.umeng.message.api.UPushThirdTokenCallback;
import com.umeng.message.entity.UMessage;

//import org.android.agoo.fcm.FCMRegister;
//import org.android.agoo.honor.HonorRegister;
//import org.android.agoo.huawei.HuaWeiRegister;
//import org.android.agoo.mezu.MeizuRegister;
//import org.android.agoo.oppo.OppoRegister;
//import org.android.agoo.vivo.VivoRegister;
//import org.android.agoo.xiaomi.MiPushRegistar;

/**
 * PushSDK集成帮助类
 */
public class PushHelper {

    public static final String TAG = "PushHelper";

    private static String MESSAGE_SECRET = "583e25a7b22b918cb5ffd7b5e0dc785f",
            APP_KEY                      = "64c8c3d6a1a164591b5f0768";

    /**
     * 预初始化
     */
    public static void preInit(Context context) {
        UMConfigure.preInit(context, APP_KEY, BuildConfig.FLAVOR);
    }

    /**
     * 初始化
     */
    public static void init(final Context context) {
        // 基础组件包提供的初始化函数，应用配置信息：http://message.umeng.com/list/apps
        // 参数一：上下文context；
        // 参数二：应用申请的Appkey；
        // 参数三：发布渠道名称；
        // 参数四：设备类型，UMConfigure.DEVICE_TYPE_PHONE：手机；UMConfigure.DEVICE_TYPE_BOX：盒子；默认为手机
        // 参数五：Push推送业务的secret，填写Umeng Message Secret对应信息
        UMConfigure.init(
                context,
                APP_KEY,
                BuildConfig.FLAVOR,
                UMConfigure.DEVICE_TYPE_PHONE,
                MESSAGE_SECRET
        );

        //获取推送实例
        PushAgent api = PushAgent.getInstance(context);

        //修改为您app/src/main/AndroidManifest.xml中package值
        api.setResourcePackageName(BuildConfig.APPLICATION_ID);

        //设置推送
        pushSetting(context);

        //设置厂商Token回调
        api.setThirdTokenCallback(new UPushThirdTokenCallback() {
            @Override
            public void onToken(String type, String token) {
                Log.i(TAG, "push type:" + type + " token:" + token);
            }
        });

        // 注册推送
        api.register(new UPushRegisterCallback() {

            @Override
            public void onSuccess(String deviceToken) {
                // deviceToken是推送消息的唯一标识
                Log.i(TAG, "deviceToken: " + deviceToken);
//                // 获取deviceToken可通过接口：
//                PushAgent.getInstance(context).getRegistrationId();
//                //设置别名：推送时可使用别名推送
//                String alias = "123456";
//                String type = "uid";
//                PushAgent.getInstance(context).setAlias(alias, type, new UPushAliasCallback() {
//                    @Override
//                    public void onMessage(boolean success, String message) {
//                        Log.i(TAG, "setAlias " + success + " msg:" + message);
//                    }
//                });
            }

            @Override
            public void onFailure(String errCode, String errDesc) {
                Log.e(TAG, "register failed! " + "code:" + errCode + ",desc:" + errDesc);
            }
        });

        if (UMUtils.isMainProgress(context)) {
            registerDevicePush(context);
        }
    }

    /**
     * 注册设备推送通道（小米、华为等设备的推送）
     */
    private static void registerDevicePush(Context context) {
//        //小米推送：填写您在小米后台APP对应的xiaomi id和key
//        MiPushRegistar.register(context, PushConstants.MI_ID, PushConstants.MI_KEY);
//        //华为推送：注意华为推送的初始化参数在AndroidManifest.xml中配置
//        HuaWeiRegister.register(context.getApplicationContext());
//        //魅族推送：填写您在魅族后台APP对应的app id和key
//        MeizuRegister.register(context, PushConstants.MEI_ZU_ID, PushConstants.MEI_ZU_KEY);
//        //OPPO推送：填写您在OPPO后台APP对应的app key和secret
//        OppoRegister.register(context, PushConstants.OPPO_KEY, PushConstants.OPPO_SECRET);
//        //vivo推送：注意vivo推送的初始化参数在AndroidManifest.xml中配置
//        VivoRegister.register(context);
//        //荣耀推送：注意荣耀推送的初始化参数在AndroidManifest.xml中配置
//        HonorRegister.register(context);
//        //谷歌fcm推送
//        FCMRegister.register(context);
    }

    /**
     * 推送设置
     */
    private static void pushSetting(Context context) {
        PushAgent api = PushAgent.getInstance(context);

        //设置通知栏显示通知的最大个数（0～10），0：不限制个数
        api.setDisplayNotificationNumber(0);

//        //推送消息处理
//        UmengMessageHandler msgHandler = new UmengMessageHandler() {
//
//            // 处理通知栏消息
//            @Override
//            public void dealWithNotificationMessage(Context context, UMessage msg) {
//                super.dealWithNotificationMessage(context, msg);
//                // 这里收到通知内容
//                Log.i(TAG, "notification receiver:" + msg.getRaw().toString());
//            }
//
//            // 自定义通知样式，此方法可以修改通知样式等
//            @Override
//            public Notification getNotification(Context context, UMessage msg) {
//
//                return super.getNotification(context, msg);
//            }
//
//            // 自定义NotificationChannel
//            @Override
//            public NotificationChannel getNotificationChannel() {
//
//
//                return super.getNotificationChannel();
//            }
//
//            // 处理透传消息
//            @Override
//            public void dealWithCustomMessage(Context context, UMessage msg) {
//                super.dealWithCustomMessage(context, msg);
//                Log.i(TAG, "custom receiver:" + msg.getRaw().toString());
//            }
//        };
//
//        api.setMessageHandler(msgHandler);
//
//        // 推送消息点击处理
//        UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
//
//            @Override
//            public void openActivity(Context context, UMessage msg) {
//                super.openActivity(context, msg);
//                Log.i(TAG, "click openActivity: " + msg.getRaw().toString());
//            }
//
//            @Override
//            public void launchApp(Context context, UMessage msg) {
//                super.launchApp(context, msg);
//                Log.i(TAG, "click launchApp: " + msg.getRaw().toString());
//            }
//
//            @Override
//            public void dismissNotification(Context context, UMessage msg) {
//                super.dismissNotification(context, msg);
//                Log.i(TAG, "click dismissNotification: " + msg.getRaw().toString());
//            }
//
//        };
//
//        api.setNotificationClickHandler(notificationClickHandler);

        //通过Service自定义接收并处理消息
        api.setPushIntentServiceClass(PushMessageService.class);

    }

}
